import { useState, useEffect, useCallback } from "react";
import { SUCCESS_CODE } from 'utils/CommonUtil';

/**
 * 
 * @param {*} fetchDataFn 查询接口
 * @param {*} initParams  初始参数
 * @returns 
 */
export const useFetch = (fetchDataFn, initParams = {}) => {

  // 数据
  const [data, setData] = useState([]);

  // 查询参数
  const [searchParams, setSearchParams] = useState(initParams);

  const loadData = useCallback(async () => {
    try {
      const params = { ...searchParams };
      const res = await fetchDataFn(params);
      if (res && res.code === SUCCESS_CODE) {
        setData(res.data);
      } else {
        console.log("获取数据失败!");
      }
    } catch(error) {
      console.log('获取数据失败!');
    }
  }, [fetchDataFn, searchParams]);

  // 初始加载数据
  useEffect(() => {
    loadData();
  }, [loadData])

   // 处理查询条件变化
  const setSearch = (newParams) => {
    setSearchParams(newParams);
  };

  // 手动触发搜索
   const doSearch = () => { 
    loadData();
  };

  return {
    data,         // 接口返回数据
    setSearch,    // 设置搜索参数
    doSearch      // 手动触发搜索的函数
  }
}